#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"
#include "algorithm"

using namespace std;
/*
 *今天继续为大家补充一道Leetcode没有的高频面试题：IP地址与int整数的转换

引用几篇面经原文描述

给你一个IP4的地址，请转成十进制整数 （2021-03 腾讯-PCG-前端）
手撕算法: ip地址转整数 （2021-03 腾讯-TEG-后端）
给我5min的时间，让你掌握这个题。文末附上本题的评测地址。

题目描述
将ip地址转换成10进制整数。

例如，ip地址为10.0.3.193，把每段拆分成一个二进制形式组合起来为00001010 00000000 00000011 11000001，然后把这个二进制数转变成十进制整数就是167773121。

题目分析
借助位运算实现。如IP 10.0.3.193，将10左移24位，0左移16位，3左移8位，193左移0位。4个seg或运算，即为结果。
 *
 *
 *
 *
 *
 * */
//todo 意思就是把 . 分开然后分别转换成二进制然后求 |


auto split = [](string &str) {
    //
    vector<int> res;
    string temp;
    for (int i = 0; i < str.size(); ++i) {
        if (str[i] == '.') {
            res.emplace_back(stoi(temp));
            temp.clear();
        } else {
            temp.push_back(str[i]);
        }

    }

    res.emplace_back(stoi(temp));

    return res;

};


static void str_to_int(string str) {

    auto res = split(str);

    unsigned long ret = 0;

//    reverse(res.begin(), res.end());
//
//    for (int i = 0; i <res.size() ; ++i) {
//        if (i!=res.size()-1)
//        ret|=res[i]<<((i+1)*8);
//        else
//          ret|=res[i] ;
//
//    }


// 每个向左移固定的位数然后相与就行
    ret = ((res[0] << 24) | (res[1] << 16) | (res[2] << 8) | (res[3]));
    cout << ret;
}

//如何把 int 转为字符串 地址
//我们再来看一下如何将整数转成IP。将整数和255做与运算，结果为IP的第4段。
// 整数右移8位，和255做与运算的结果就是IP的第3段...
// 最后再将每轮与运算的结果拼接起来便是最终的IP地址
static void int_to_ip() {
    //就是一点做与运算 让他属于0-255的值

}
